Jag vill ta bort en filial både lokalt och på distans. Misslyckades försök att radera en fjärrfilial $ git gren -d fjärrkontroller / ursprung / bugfix fel: filialen 'fjärrkontroller / ursprung / bugfix' hittades inte. $ git branch -d origin / bugfix fel: filialen 'origin / bugfix' hittades inte. $ git branch -rd origin / bugfix Borttagen fjärrgrenens ursprung / bugfix (var 2a14ef7). $ git push Allt uppdaterat $ git pull Från github.com:gituser/gitproject * [ny gren] bugfix -> origin / bugfix Redan uppdaterad. Vad ska jag göra annorlunda för att framgångsrikt radera fjärrkontrollen / ursprunget / bugfix-grenen både lokalt och på distans?
2020-12-07 13:12:31
1 2 Nästa Sammanfattning $ git push -d$ git branch -d Observera att fjärranamnet i de flesta fall är ursprung. I ett sådant fall måste du använda kommandot så. $ git push -d ursprung Ta bort lokal filial För att radera den lokala filialen, använd något av följande: $ git branch -d branch_name $ git gren -D grennamn Obs: Alternativet -d är ett alias för --delete, som bara tar bort filialen om den redan har sammanfogats helt i sin uppströmsfilial. Du kan också använda -D, vilket är ett alias för --delete --force, som tar bort filialen "oavsett dess sammanslagna status." [Källa: man git-branch] Observera också att git branch -d branch_name kommer att misslyckas om du är för närvarande i den gren du vill ta bort. Meddelandet börjar med fel: Det går inte att ta bort grenen 'filialnamn'. Om så är fallet, byt först till någon annan gren, till exempel: git checkout master. Ta bort fjärrgren [Uppdaterad 8-sep-2017] Från och med Git v1.7.0 kan du radera en fjärrgren med $ git push - radera som kan vara lättare att komma ihåg än $ git push : som lades till i Git v1.5.0 "för att radera en fjärrgren eller en tagg." Från och med Git v2.8.0 kan du också använda git push med alternativet -d som ett alias för --delete. Därför dikterar versionen av Git du har installerat om du behöver använda den enklare eller hårdare syntaxen. Ta bort fjärrgren [Ursprungligt svar från 5 jan 2010] Från kapitel 3 i Pro Git av Scott Chacon: Ta bort fjärrgrenar Antag att du är klar med en fjärrgren - säg att du och dina medarbetare är färdiga med en funktion och har slagit den i fjärrkontrollens huvudgren (eller vilken gren som din stabila kodlinje finns i). Du kan radera en avlägsen gren med den ganska trubbiga syntaxen git push [remotename]: [branch]. Om du vill ta bort din serverfixgren från servern kör du följande: $ git push-ursprung: serverfix Till git@github.com: schacon / simplegit.git - [borttagen] serverfix Bom. Inga fler filialer på din server. Du kanske vill ha den här sidan, eftersom du behöver det kommandot och du kommer troligen att glömma syntaxen. Ett sätt att komma ihåg detta kommando är genom att återkalla git push [remotename] [localbranch]: [remotebranch] syntax som vi gick igenom lite tidigare. Om du slutar med [localbranch] -delen säger du i princip: "Ta ingenting på min sida och gör det till [remotebranch]." Jag utfärdade git push-ursprung: bugfix och det fungerade vackert. Scott Chacon hade rätt - jag vill hunda den sidan (eller praktiskt taget hundörat genom att svara på detta på Stack Overflow). Då bör du utföra detta på andra maskiner # Hämta ändringar från alla fjärrkontroller och radera lokalt # fjärr borttagna grenar / taggar etc. # --prune kommer att göra jobbet: -; git hämta - alla - beskär för att sprida förändringar. | Matthews svar är utmärkt för att ta bort avlägsna grenar och jag uppskattar också förklaringen, men för att göra en enkel skillnad mellan de två kommandona: Så här tar du bort en lokal filial från din maskin: git branch -d {the_local_branch} (använd -D istället för att tvinga bort ramen utan att kontrollera sammanslagen status) Så här tar du bort en fjärrgren från servern: git push origin - radera {the_remote_branch} Referens: Git: Ta bort en gren (lokal eller fjärr) | De korta svaren Om du vill ha mer detaljerade förklaringar av följande kommandon, se de långa svaren i nästa avsnitt. Ta bort en avlägsen gren git push origin --delete # Git version 1.7.0 eller senare git push origin -d # Kortare version (Git 1.7.0 eller senare) git push-ursprung: # Git-versioner äldre än 1.7.0 Ta bort en lokal filial git branch --delete git branch -d # Kortare version git -gren -D # Tvinga bort orena sammanslagna grenar Radera en lokal fjärrspårningsfilial git branch --delete --fjärrkontroller / git gren -dr / # Kortare git hämta - beskär # Ta bort flera föråldrade fjärrspårningsgrenar git hämta -p # Kortare Det långa svaret: det finns tre olika grenar att radera! När du har att göra med att ta bort filialer både lokalt och på distans, kom ihåg att det finns tre olika grenar inblandade: Den lokala filialen X. Den avlägsna ursprungsgrenen X. Det lokala fjärrspårningsgrenens ursprung / X som spårar fjärrgrenen X. Originalaffischen använde: git branch -rd origin / bugfix Som bara raderade hans lokala fjärrspårningsgrenens ursprung / bugfix, och inte den faktiska fjärrgrenens bugfix på ursprung. För att radera den faktiska fjärrgrenen behöver du git push origin - radera bugfix Ytterligare detaljer Följande avsnitt beskriver ytterligare detaljer som du bör tänka på när du tar bort dina fjärr- och fjärrspårningsgrenar. Om du trycker på för att ta bort fjärrgrenar tas också bort spårningsgrenar Observera att radering av fjärrgren X från kommandoradenatt använda en git-push tar också bort den lokala fjärrspårningsgrenens ursprung / X, så det är inte nödvändigt att beskära den föråldrade fjärrspårningsgrenen med git-hämta - prune eller git-hämta -p. Det skulle dock inte skada om du gjorde det ändå. Du kan verifiera att fjärrspårningsgrenens ursprung / X också raderades genom att köra följande: # Se bara fjärrspårning av grenar git gren - fjärrkontroller git gren -r # Se både strikt lokala och fjärrspårande filialer git gren - allt git gren -a Beskärning av det föråldrade lokala fjärrspårningsgrenens ursprung / X Om du inte tog bort din fjärrgren X från kommandoraden (som ovan), kommer ditt lokala förvar fortfarande att innehålla (ett nu föråldrat) fjärrspårningsgrenens ursprung / X. Detta kan hända om du till exempel har tagit bort en fjärrgren direkt via GitHubs webbgränssnitt. Ett typiskt sätt att ta bort dessa föråldrade fjärrspårningsgrenar (sedan Git version 1.6.6) är att helt enkelt köra git-hämtning med --prune eller kortare -p. Observera att detta tar bort alla föråldrade lokala fjärrspårningsgrenar för alla fjärrgrenar som inte längre finns på fjärrkontrollen: git hämta ursprung - beskär git fetch origin -p # Shorter Här är det relevanta citatet från 1.6.6 release notes (betoning min): "git fetch" lärde sig - alla och - flera alternativ, att köra hämta från många arkiv och --prune-alternativ för att ta bort fjärrspårning grenar som blev föråldrade. Dessa gör "git remote update" och "git fjärrskärning "mindre nödvändigt (det finns ingen plan att ta bort" fjärrkontroll uppdatera "eller" fjärrskära ", dock). Alternativ till ovanstående automatisk beskärning för föråldrade fjärrspårningsgrenar Alternativt, i stället för att beskära dina föråldrade lokala fjärrspårningsgrenar genom git fetch -p, kan du undvika att göra den extra nätverksoperationen genom att manuellt ta bort gren (ar) med flaggorna --remote eller -r: git branch --delete --fjärrar ursprung / X git branch -dr origin / X # Shorter Se även git-branch (1) Manual Page. git-fetch (1) Manuell sida. Pro Git § 3.5 Git Branching - Fjärrgrenar. | Steg för att radera en filial: För att ta bort fjärrgrenen: git push origin - radera För att radera den lokala filialen har du tre sätt: 1: git gren -D 2: git-gren --delete - force # Samma som -D 3: git-gren - radera # Fel vid upptagning Förklara: OK, förklara bara vad som händer här! Gör helt enkelt git push-ursprung - radera för att bara ta bort din fjärrgren, lägg till namnet på grenen i slutet så kommer den att raderas och tryck den till fjärrkontrollen samtidigt ... Också, git branch -D, som bara tar bort den lokala grenen bara! ... -D står för --delete - force som kommer att radera filialen även om den inte är sammanslagen (tvångsradering), men du kan också använda -d som står för --delete som ger ett fel som motsvarar grenens sammanslagningsstatus ... Jag skapar också bilden nedan för att visa stegen: | Du kan också använda följande för att ta bort fjärrgrenen git push - radera origin serverfix Som gör samma sak som git push-ursprung: serverfix men det kan vara lättare att komma ihåg. | Tips: När du tar bort filialer med git branch -d # Tar bort lokal filial eller git push origin: # Tar bort fjärrgren endast referenserna raderas. Även om filialen faktiskt tas bort på fjärrkontrollen finns referenser till den fortfarande i dina lagmedlemmars lokala förråd. Det betyder att för andra teammedlemmar är de raderade filialerna fortfarande synliga när de gör en git-filial -a. För att lösa detta kan dina teammedlemmar beskära de raderade filialerna med git remote beskära Detta är vanligtvis git remote beskärningsursprung. | Om du vill radera en gren, först checka ut till den andra filialen än den gren som ska raderas. git kassan annan_ än filial_till_raderad Ta bort den lokala filialen: git branch -D branch_to_be_deleted Radera fjärrgrenen: git push-ursprung - radera gren_ till_raderad | git gren -D git branch -D -r origin / git push-ursprung: | Detta är enkelt: Kör bara följande kommando: För att radera en Git-gren både lokalt och på distans, ta först först den lokala grenen med det här kommandot: git gren -d exempel (Här exemplet är filialnamnet.) Och efter det, ta bort fjärrgrenen med det här kommandot: git push origin: exempel | Det är väldigt enkelt: Ta bort fjärrgrenen git push -d origin Eller git push-ursprung: För att radera den lokala filialen med kraft git branch -D | Ett annat tillvägagångssätt är: git push - beskär ursprung VARNING: Detta tar bort alla fjärrgrenar som inte finns lokalt. Eller mer heltäckande, git push - spegel kommer effektivt att få fjärrförvaret att se ut som den lokala kopian av förvaret (lokala huvuden, fjärrkontroller och taggar speglas på fjärrkontrollen). | Jag använder följande i mina Bash-inställningar: alias git-shoot = "git pushursprung - radera " Då kan du ringa: git-shoot grennamn | Ta bort lokalt: För att radera en lokal filial kan du använda: git branch -d För att radera en gren med våld, använd -D istället för -d. git gren -D Radera på distans: Det finns två alternativ: git push origin: grennamn git push origin - radera filialnamn Jag föreslår att du använder andra sättet eftersom det är mer intuitivt. | Sedan januari 2013 inkluderade GitHub en Ta bort filialknapp bredvid varje gren på sidan "Grenar". Relevant blogginlägg: Skapa och ta bort filialer | Om du vill slutföra båda dessa steg med ett enda kommando kan du skapa ett alias för det genom att lägga till nedan i din ~ / .gitconfig: [alias] rmbranch = "! f () {git branch -d $ {1} && git push origin - radera $ {1};}; f" Alternativt kan du lägga till detta i din globala konfiguration från kommandoraden med git config - globalt alias.rmbranch \ '! f () {git branch -d $ {1} && git push origin - radera $ {1}; }; f ' OBS! Om du använder -d (små bokstäver d) kommer filialen att raderas endast om den har slagits samman. För att tvinga borttagningen måste du använda -D (versaler D). | För att ta bort din filial lokalt och på distans Kassa till masterfilial - git checkout master Ta bort din avlägsna gren - git push origin - radera Ta bort din lokala filial - git branch --delete | Du kan också göra det med git remote beskärningsursprung $ git fjärrkontroll beskär ursprung Beskärning av ursprung URL: git@example.com/yourrepo.git * [beskurna] ursprung / några grenar Det beskär och raderar fjärrspårande grenar från en git-gren -r-lista. | Förutom de andra svaren använder jag ofta verktyget git_remote_branch. Det är en extra installation, men det ger dig ett bekvämt sätt att interagera med avlägsna grenar. I det här fallet ska du radera: grb radera gren Jag tycker att jag också använder kommandona publicera och spåra ganska ofta. | Ett kommando med en linje för att radera både lokal och fjärrkontroll: D = grennamn; git gren -D $ D; git push-ursprung: $ D Eller lägg till aliaset nedan i din ~ / .gitconfig. Användning: git kill filialnamn [alias] kill = "! f () {git branch -D \" $ 1 \ "; git push origin - radera \" $ 1 \ ";}; f" | Ta bort filialer Låt oss anta att vårt arbete med filialens "kontaktformulär" är klart och vi har redan integrerat det i "master". Eftersom vi inte behöver det längre kan vi ta bort det (lokalt): $ git gren -d kontaktformulär Och för att ta bort fjärrgrenen: git push origin - radera kontaktformulär | Ta bort fjärrgren git push-ursprung: Ta bort lokal filial git branch -D Ta bort lokala filialsteg: kassan till en annan filial ta bort lokal filial | Säg bara: git branch -d git push-ursprung: | git push origin --delete är lättare att komma ihåg än git push origin: branchName | Nu kan du göra det med GitHub Desktop-applikationen. Efter att ha startat applikationen Klicka på projektet som innehåller filialen Byt till den gren du vill ta bort Från menyn "Branch" väljer du "Unpublish ..." för att ta bort filialen från GitHub-servrarna. Välj "Radera" filialnamn "..." på menyn "Gren" för att ta bort filialen från din lokala maskin (AKA maskinen du arbetar för närvarande) | Ta bort lokalt - (normalt) git branch -d my_branch Om din filial håller på att byggas om / slås samman och det inte gjordes ordentligt betyder det att du får ett fel, Rebase / Merge pågår, så i så fall kommer du inte att kunna ta bort din filial. Så antingen måste du lösa omfördelning / sammanslagning. Annars kan du radera tvång genom att använda, git gren -D my_branch För att radera i fjärrkontrollen: git push - radera ursprung my_branch Du kan göra detsamma med: git push origin: my_branch # Lätt att komma ihåg att båda kommer att göra detsamma. Grafisk representation: | Detta fungerar inte om du har en tagg med samma namn som filialen på fjärrkontrollen: $ git push-ursprung: gren-eller-tag-namn fel: dst refspec gren-eller-tag-namn matchar mer än en. fel: misslyckades med att skicka några refs till 'git@github.com: SomeName / some-repo.git' I så fall måste du ange att du vill ta bort filialen, inte taggen: git push origin: refs / heads / branch-or-tag-name På samma sätt, för att ta bort taggen istället för den gren du skulle använda: git push origin: refs / tags / branch-or-tag-name | Många av de andra svaren leder till fel / varningar. Detta tillvägagångssätt är relativt idiotsäkert, även om du fortfarande kan behöva git-gren -D branch_to_delete om det till exempel inte är helt sammanfogat till some_other_branch. git kassan some_other_branch git push origin: branch_to_delete git branch -d branch_to_delete Fjärrbeskärning behövs inte om du har tagit bort fjärrgrenen. Det används bara för att få de mest uppdaterade fjärrkontroller som finns tillgängliga i ett förvar du spårar. Jag har observerat att git-hämtning kommer att lägga till fjärrkontroller, inte ta bort dem. Här är ett exempel på när git remote beskärningsursprung faktiskt kommer att göra något: Användare Agör stegen ovan. Användare B skulle köra följande kommandon för att se de mest uppdaterade fjärrgrenarna: git hämta git fjärrkontroll beskär ursprung git gren -r | Jag blev trött på att googla för det här svaret, så jag tog en liknande inställning till svaret som crizCraig publicerade tidigare. Jag lade till följande i min Bash-profil: funktion gitdelete () { git push-ursprung - radera $ 1 git gren -D $ 1 } Sedan kör jag följande i min terminal varje gång jag är klar med en filial (t.ex. till en master). gitdelete my-branch-name ... som sedan tar bort mitt filialnamn från såväl ursprung som lokalt. | Innan du kör git branch --delete se till att du först bestämmer vad det exakta namnet på fjärrgrenen är genom att köra: git ls-remote Detta kommer att berätta vad du ska ange exakt för -värdet. (gren är skiftlägeskänslig!) | Använda sig av: git push origin: bugfix # Tar bort fjärrgren git branch -d bugfix # Måste ta bort lokal filial manuellt Om du är säker på att du vill ta bort den, kör git branch -D bugfix Nu för att rensa bort borttagna fjärrgrenar kör git fjärrkontroll beskär ursprung | 1 2 Nästa Mycket aktiv fråga. Tjäna 10 rykte för att svara på den här frågan. Kravet på rykte hjälper till att skydda denna fråga från skräppost och icke-svar-aktivitet. Inte svaret du letar efter? Bläddra bland andra frågor taggade git version-control git-branch git-push git-remote eller ställ din egen fråga.